package org.example.cake.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import org.example.cake.common.Rep;

import org.example.cake.entity.Carousel;

import org.example.cake.entity.Festival;

import java.util.List;
import java.util.Map;

@Mapper
public interface FestivalMapper {
    int deleteByPrimaryKey(Integer festivalid);

    int insert(Festival record);

    int insertSelective(Festival record);

    Festival selectByPrimaryKey(Integer festivalid);

    int updateByPrimaryKeySelective(Festival record);

    int updateByPrimaryKey(Festival record);

    /**
     * 查询所有节日
     * @return 节日集合
     */
    List<Festival> getFestivals();


    /**
     * //后台节日活动分页模糊查询
     * @author 徐
     * @param festivalname 节日名称
     * @param discountid 优惠券id
     * @date 2025-07-31
     * @return 节日集合
     */
    public List<Festival>selectFestivalPageEnd(@Param("festivalname") String festivalname,
                                               @Param("discountid") Integer discountid );

    /**
     * //后台节日活动删除（根据id删除）
     * @author 徐
     * @param festivalid 节日id
     * @date 2025-07-31
     * @return 节日id
     */
    public int deleteFestivalEnd(@Param("festivalid")Integer festivalid);

    /**
     * //新增后台节日活动信息
     * @author 徐
     * @param festival 节日对象
     * @date 2025-07-31
     * @return 受影响的行数
     */
    public int insertFestivalEnd(Festival festival);

    /**
     * //修改后台节日信息
     * @author 徐
     * @param festival 节日对象
     * @date 2025-07-31
     * @return 受影响的行数
     */
    public int updateFestivalEnd(Festival festival);

    /**
     * //后台根据id查询节日活动是否存在
     * @author 徐
     * @param festivalid 节日id
     * @date 2025-08-04
     * @return 受影响行数
     */
    public Festival selectById(@Param("festivalid") Integer festivalid);



    /**
     * 查询所有活动（带优惠券信息）
     * @author 罗江锦
     * @return 活动列表
     */
    List<Festival> selectAllFestivalSky();

    /**
     * 查询可用优惠券（用于下拉框）
     * @author 罗江锦
     * @return 优惠券选项列表（value-label格式）
     */
    List<Map<String, Object>> selectAvailableDiscountSky();

    /**
     * 根据ID查询活动详情（带优惠券信息）
     * @author 罗江锦
     * @param festivalid 活动ID
     * @return 活动详情
     */
    Festival selectByPrimaryKeySky(@Param("festivalid") Integer festivalid);

    /**
     * 新增活动
     * @author 罗江锦
     * @param festival 活动实体
     * @return 受影响行数
     */
    int insertFestivalSky(Festival festival);

    /**
     * 更新活动（包含优惠券相关字段）
     * @author 罗江锦
     * @param festival 活动实体
     * @return 受影响行数
     */
    int updateFestivalSky(Festival festival);

    /**
     * 删除活动
     * @author 罗江锦
     * @param festivalid 活动ID
     * @return 受影响行数
     */
    int deleteFestivalSky(@Param("festivalid") Integer festivalid);

    /**
     * 检查时间段是否重叠
     * @author 罗江锦
     * @param festivalstart 开始时间
     * @param festivalend 结束时间
     * @param festivalid 排除的活动ID（用于编辑时排除自身）
     * @return 重叠数量
     */
    int checkTimeOverlap(
            @Param("festivalstart") String festivalstart,
            @Param("festivalend") String festivalend,
            @Param("festivalid") Integer festivalid
    );

    /**
     * 根据优惠券ID查询关联活动
     * @author 罗江锦
     * @param discountid 优惠券ID
     * @return 活动列表
     */
    List<Festival> selectFestivalsByDiscountId(@Param("discountid") Integer discountid);

    /**
     * 查询当前有效的活动
     * @author 罗江锦
     * @return 活动列表（带优惠券信息）
     */
    List<Festival> selectCurrentFestivalSky();
}